package pe.edu.upc.dew.puntos.dao;

import pe.edu.upc.dew.puntos.Model.*;
import java.util.ArrayList; 
import java.util.List;

// <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
// #[regen=yes,id=DCE.BF07D9F9-E1C3-EC90-D29A-C9EB3FDAD33D]
// </editor-fold> 
public class CtrlRegistroPromocion {

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.C6567470-3DE8-F861-DA94-E11C33AC58BE]
    // </editor-fold> 
    private ArrayList<Producto> productos;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.9A546C26-554A-D7B6-C375-36DA0AD8837E]
    // </editor-fold> 
    private ArrayList<Promocion> promociones;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.B9E11342-012C-6A00-1117-C57757E69C66]
    // </editor-fold> 
    private ArrayList<LugarPromocion> lugaresPromocion;

    private Integer correlativoProducto=0;
    private Integer correlativoPromocion=0;
    private Integer correlativoLugarPromo=0;
    
    
    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.3FA2B582-0DCE-94A9-09FC-5BEC5BFE6D12]
    // </editor-fold> 
    public CtrlRegistroPromocion () {
        this.productos = new ArrayList<Producto>();
        this.promociones = new ArrayList<Promocion>();
        this.lugaresPromocion = new ArrayList<LugarPromocion>();
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.FB46EDEC-34FF-42CC-535C-A50338D88D1D]
    // </editor-fold> 
    public ArrayList<LugarPromocion> getLugaresPromocion () {
        return lugaresPromocion;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.EE7C9212-72AA-F317-BA75-696137F18F59]
    // </editor-fold> 
    public void setLugaresPromocion (ArrayList<LugarPromocion> val) {
        this.lugaresPromocion = val;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.0C99346F-F84C-322C-7E8D-BFD1B1D6177B]
    // </editor-fold> 
    public ArrayList<Producto> getProductos () {
        return productos;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.049226E6-B3F4-24E7-FC3E-5829A8DDAA9D]
    // </editor-fold> 
    public void setProductos (ArrayList<Producto> val) {
        this.productos = val;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.15FA6C02-B8A8-9190-1E54-35087E6D4374]
    // </editor-fold> 
    public ArrayList<Promocion> getPromociones () {
        return promociones;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.ED6DCE2E-13E6-8FE8-6023-33A88AD38297]
    // </editor-fold> 
    public void setPromociones (ArrayList<Promocion> val) {
        this.promociones = val;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.7F369A37-5D16-F745-D64C-DAFB9C97F4EB]
    // </editor-fold> 
    public void registrarProducto (String desProducto, Establecimiento establecimiento,String imagen) {
        this.correlativoProducto = this.correlativoProducto + 1;
        Producto producto = new Producto(this.correlativoProducto,desProducto,establecimiento,imagen);
        this.productos.add(producto);
        //System.out.print(producto.getDesProducto());
    }
    
    public Producto registrarProductoNuevo (String desProducto, Establecimiento establecimiento,String imagen) {
        this.correlativoProducto = this.correlativoProducto + 1;
        Producto producto = new Producto(this.correlativoProducto,desProducto,establecimiento,imagen);
        this.productos.add(producto);
        
        return this.buscarProducto(this.correlativoProducto);
    }    

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.0D48BD3A-429A-C069-C254-7E179DD18247]
    // </editor-fold> 
    public Producto buscarProducto (Integer codProducto) {
        Producto productoEncontrado=null;
        for(Producto producto : this.productos){
            if(producto.getCodProducto() == codProducto)
            {  productoEncontrado = producto;
                break;
            }
        }    
        return productoEncontrado;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.AF2409AA-3625-DF1A-2125-A19DE56D9AF8]
    // </editor-fold> 
    public void eliminarProducto (Integer codProducto) {
        Producto producto = this.buscarProducto(codProducto);
        this.productos.remove(producto);
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.B7497B1A-94FC-71F7-97F2-AA41FA9781E4]
    // </editor-fold> 
    public void registrarPromocion (String fecInicio, String fecTermino, Integer regla01Puntos, Integer regla02Puntos, double regla02Dinero, Producto producto) {
        this.correlativoPromocion = this.correlativoPromocion + 1;
        Promocion nuevaPromocion = new Promocion(this.correlativoPromocion,fecInicio,fecTermino,regla01Puntos,regla02Puntos,regla02Dinero,producto);
        this.promociones.add(nuevaPromocion);
    }

    public Promocion registrarPromocionNuevo (String fecInicio, String fecTermino, Integer regla01Puntos, Integer regla02Puntos, double regla02Dinero, Producto producto) {
        this.correlativoPromocion = this.correlativoPromocion + 1;
        Promocion nuevaPromocion = new Promocion(this.correlativoPromocion,fecInicio,fecTermino,regla01Puntos,regla02Puntos,regla02Dinero,producto);
        this.promociones.add(nuevaPromocion);
        
        return this.buscarPromocion(this.correlativoPromocion);
    }    
    
    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.CAB8119E-E77F-CBE1-5E12-731C10F25A90]
    // </editor-fold> 
    public Promocion buscarPromocion (Integer codPromocion) {
        Promocion promocionEncontrada=null;
        for(Promocion promocion : this.promociones){
            if(promocion.getCodPromocion() == codPromocion)
            {  promocionEncontrada = promocion;
                break;
            }
        }    
        return promocionEncontrada; 
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.17806C74-C638-E1BB-FBAE-1682D39EAB0A]
    // </editor-fold> 
    public void eliminarPromocion (Integer codPromocion) {
        Promocion promocion = this.buscarPromocion(codPromocion);
        this.promociones.remove(promocion);
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.A0CD92D0-0DE5-7834-7B1E-496CBD064D30]
    // </editor-fold> 
    public void registrarLugarPromocion (Sucursal sucursal, Promocion promocion) {
        this.correlativoLugarPromo = this.correlativoLugarPromo + 1;
        LugarPromocion lugarPromocion = new LugarPromocion(this.correlativoLugarPromo,promocion,sucursal);
        this.lugaresPromocion.add(lugarPromocion);
    }
    
    public LugarPromocion registrarLugarPromocionNuevo (Sucursal sucursal, Promocion promocion) {
        this.correlativoLugarPromo = this.correlativoLugarPromo + 1;
        LugarPromocion lugarPromocion = new LugarPromocion(this.correlativoLugarPromo,promocion,sucursal);
        this.lugaresPromocion.add(lugarPromocion);
        
        return this.buscarLugarPromocion(this.correlativoPromocion);
    }    

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.4FFDFF07-F8DE-EACD-141C-ED3853B00734]
    // </editor-fold> 
    public LugarPromocion buscarLugarPromocion (Integer codLugarPromocion) {
        LugarPromocion lugarEncontrado=null;
        for(LugarPromocion lugar : this.lugaresPromocion){
            if(lugar.getCodLugarPromocion()== codLugarPromocion)
            {  lugarEncontrado = lugar;
               break;
            }
        }    
        return lugarEncontrado; 
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.73ABA6D4-0EAE-F64E-E4CC-9C4999543B62]
    // </editor-fold> 
    public void eliminarLugarPromocion (Integer codLugarPromocion) {
        LugarPromocion lugar = this.buscarLugarPromocion(codLugarPromocion);
        this.lugaresPromocion.remove(lugar);
    }

    public ArrayList<Promocion> mostrarPromocionPorCliente(Cliente cliente)
    {

       System.out.print(cliente.getPuntos());
       ArrayList<Promocion> PromocionesCliente= new ArrayList<Promocion>();
        
        for(Promocion promocion : this.getPromociones()){
            if (promocion.getRegla01Puntos() <= cliente.getPuntos())
            {
                PromocionesCliente.add(promocion);
//                String descripcion;
//                descripcion = promocion.getProducto().getDesProducto();
            }
        }
        
        return PromocionesCliente;
    }
}

